package com.hair.logy.core.utils;



import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class MergeFile {

    //rw方法为文件的写入，可以按照下面的文本格式进行写入
    private static void rw(File src, File dst) {
        try (var is = new FileInputStream(src); var os = new FileOutputStream(dst,true)) {
            String txt = """
                --------------------------------------------------------\r\n
                文件名：%s\r\n
                行数：%d\r\n
                时间：%tF %<tT\r\n
                路径：%s\r\n
                --------------------------------------------------------\r\n
                %s
                """;
            //读取目标文件的所有字节并转换为字符串
            String st = new String(is.readAllBytes());
            StringBuilder sbu = new StringBuilder();
            //提供原子操作的 Integer 类，通过线程安全的方式操作加减
            AtomicInteger num = new AtomicInteger();
            st.lines().forEach(row -> {
                sbu.append(String.format("%d. %s\r\n", num.getAndIncrement(), row));
            });
            sbu.append("\r\n\r\n");
            //进行格式化
            String ok = String.format(txt, src.getName(), st.lines().count(), src.lastModified(), src.getAbsolutePath(), sbu);
            //写入目标文件
            os.write(ok.getBytes());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    //创建一个方法，判断改文件是不是目录或者文件，运用递归，直到是文件为止。
    public static void mergeFile(List<File> src, File dst) {
        for (File  file:
        src) {
            rw(file, dst);
        }
    }


}
